package com.baidu.mpks.role.dao;

import com.baidu.mpks.permission.domain.Permission;
import com.baidu.mpks.role.domain.Role;
import com.baidu.mpks.role.domain.RolePermission;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

public interface RoleDao {

    Role findById(@Param("id") int id);

    Role findByName(@Param("name") String name);

    List<Role> findByUserId(@Param("userId") String userId);

    List<Role> findRoleUserList(@Param("start") Integer start, @Param("pageSize") Integer pageSize);

    List<Role> findRolePermissionList(@Param("roleId") Integer roleId);

    List<Role> findRoleListPage(@Param("start") Integer start, @Param("pageSize") Integer pageSize, @Param("keyword") String keyword);

    List<Role> findRoleList(@Param("excludeIds") List<Integer> excludeIds);

    List<Role> findRoleListWithOutStatus();

    List<Permission> findPermissionListByRoleId(@Param("roleId") Integer roleId);

    int insert(Role role);

    int insertRoleOrPermission(@Param("roleId") Integer roleId, @Param("permissionIdList") List<Integer> permissionIdList);

    int insertRoleOrUser(@Param("roleId") Integer roleId, @Param("userId") String userId);

    void delete(Role role);

    void deleteRoleAndPermissionByRoleId(@Param("roleId") Integer roleId);

    void deleteRoleOrUserByRoleId(@Param("roleId") Integer roleId);

    void update(Role role);

    void updateRoleStatus(Role role);

    Long getTotalPage(@Param("keyword") String keyword);

    Long isExistRoleUser(@Param("roleId") Integer roleId, @Param("userId") String userId);

    List<RolePermission> findByPermissionCode(@Param("permissionCode") String permissionCode);

    List<Role> findByGroupIdAndRoleIdIn(@Param("roleIds") Set<Integer> roleIdList);

    int findRoleUserByUserIdAndRoleId(@Param("userId") String userId, @Param("roleIds") Set<Integer> roleIds);

    List<Role> findByIds(@Param("roleIds") List<Integer> roleIds);

    List<Role> findRoleListPageExclude(@Param("start") Integer start, @Param("pageSize") Integer pageSize, @Param("keyword") String keyword, @Param("excludeIds") List<Integer> excludeIds);

    Long getTotalPageExclude(@Param("keyword") String keyword, @Param("excludeIds") List<Integer> excludeIds);
}
